package br.ufc.spaceinvaders;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.util.List;

import javax.swing.ImageIcon;

/**
 * 
 * Classe que representa uma Nave do jogo, 
 * contendo os atributos e métodos para que ela sirva de modelo para 
 * o compomente que aparecerá na tela.
 * 
 */
public class Nave {
	private int x, y;
	
	private int dx, dy;
	
	private Image imagem;
	private List<Missel> misseis;
	private int altura;
	private int largura;
	private boolean isVisivel;
	
	
	
	/**
	 * Construtor padrão da classe Nave que carrega a imagem da nave e inicializa seus atributos
	 */
	public Nave()
	{
		ImageIcon referencia = new ImageIcon("res/nave.gif");
		imagem = referencia.getImage();
		
		this.x = 100;
		this.y = 100;
		
		this.altura = imagem.getHeight(null);
		this.largura = imagem.getWidth(null);
		this.misseis = new ArrayList<>();
		
	}
	
	/**
	 * Método que atualiza as coordenada x e y do objeto
	 */
	public void mexer()
	{
		x += dx;
		y += dy;
		
		if (this.x < 1) {
			this.x = 1;
		}
		
		if (this.x > 462) {
			this.x = 462;
		}
		
		if (this.y < 1) {
			this.y = 1;
		}
		
		if (this.y > 343) {
			this.y = 343;
		}
	}
	
	public int getX() {
		return x;
	}
	
	public int getY() {
		return y;
	}

	public Image getImagem() {
		return imagem;
	}
	public boolean isVisivel(){
		return isVisivel;
	}
	public void setVisivel(boolean isVisivel){
		this.isVisivel = isVisivel;
	}
	
	public List<Missel> getMisseis() {
		return misseis;
	}

	public void setMisseis(List<Missel> misseis) {
		this.misseis = misseis;
	}
	public Rectangle getBounds(){
		return new Rectangle(x,y,largura,altura);
	}

	/**
	 * 
	 * Tratamento de evento do teclado
	 * 
	 * @param tecla
	 */
	public void keyPressed(KeyEvent tecla){
		
		int codigo = tecla.getKeyCode();
		
		if(codigo == KeyEvent.VK_UP){
			dy = -1;
		}
		if(codigo == KeyEvent.VK_DOWN){
			dy = 1;
		}
		
		if(codigo == KeyEvent.VK_LEFT){
			dx = -1;
		}
		if(codigo == KeyEvent.VK_RIGHT){
			dx = 1;
		}
		
	}
	
	/**
	 * Tratamento de evento do teclado
	 * @param tecla
	 */
	public void keyReleased(KeyEvent tecla){
		
		int codigo = tecla.getKeyCode();
		
		if(codigo == KeyEvent.VK_UP){
			dy = 0;
		}
		if(codigo == KeyEvent.VK_DOWN){
			dy = 0;
		}
		
		if(codigo == KeyEvent.VK_LEFT){
			dx = 0;
		}
		if(codigo == KeyEvent.VK_RIGHT){
			dx = 0;
		}
		if(codigo == KeyEvent.VK_SPACE){
			this.misseis.add(new Missel(this.x + largura/2, this.y + altura / 2));
		}
	}
	
}
